package com.bear.newsset.util;

import androidx.annotation.NonNull;

import java.util.ArrayList;
import java.util.List;

/**
 * 数据观察者管理器 - DataObserverManage
 * 通过 setResult 设置一个通知，它会将设置的通知回调给注册者，即 registerResult
 */
public class DOM {
    private static DOM instance = null;
    private List<OnResultListener> listenerList;

    public interface OnResultListener { void onResult(int id, Object data); }

    private DOM() { listenerList = new ArrayList<>(); }
    public static DOM getInstance() {
        if( instance == null ) {
            synchronized ( DOM.class ) {
                if( instance == null ) {
                    instance = new DOM();
                }
            }
        }
        return instance;
    }

    /**
     * 设置结果
     * 这个结果会通知所有注册的监听器
     * @param id    id
     * @param data  data
     */
    public void setResult(final int id, final Object data) {
        for ( int i = 0;i < listenerList.size();i++ ) {
            listenerList.get(i).onResult(id, data);
        }
    }

    /**
     * 设置结果
     * @param id    id
     */
    public void setResult(int id) {
        setResult(id, null);
    }

    /**
     * 注册监听器
     * @param mOnResultListener     注册的监听器
     * @return                      是否注册成功
     */
    public boolean registerResult(@NonNull OnResultListener mOnResultListener) {
        return listenerList.add(mOnResultListener);
    }

    /**
     * 解除注册监听器
     * @param mOnResultListener     解除的监听器
     * @return                      是否解除成功
     */
    public boolean unRegisterResult(@NonNull OnResultListener mOnResultListener) {
        return listenerList.remove(mOnResultListener);
    }
}
